import java.util.Arrays;

class Solution467 {
    public int findSubstringInWraproundString(String s) {
        if(s.length() <= 1) return s.length() ;
        int n = s.length() ;
        char[] arr = s.toCharArray() ;
        // 状态表示 : 以 i 结尾 , 有多少个子串
        int[] dp = new int[n] ;
        //  arr里每个字母都可以作为 子串, 所以dp都初始化为 1 , 这样就不需要计算 dp[i-1] + 1 , 而是直接 + dp[i-1] ;
        Arrays.fill(dp , 1) ;

        // 去重 : 只记录 某个 字母 结尾时, 的最长长度 ,
        // 例如 : abc , zabc , 那么以c结尾的 zabc 里包含了 abc , 所以就只需要保存zabc,这个最长的长度
        int[] hash = new int[26] ;
        hash[arr[0] - 'a' ] = 1 ;

        for(int i=1 ; i <n ; i ++){
            char cur = arr[i] ;
            if(cur - arr[i-1] == 1 || cur=='a'&& arr[i-1]=='z'){
                dp[i] += dp[i-1] ;
            }
            // 去重: 只记录 arr[i] 这个字母结尾时,的最大子串长度
            hash[cur-'a'] = Math.max(hash[cur-'a'] , dp[i]) ;
        }
        int sum = 0 ;
        // 加上所有字母结尾时,的最长子串长度 ;
        for(int i : hash){
            sum += i ;
        }

        return sum;

    }
} 